<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>
//let        可以在声明的时候不赋值    无变量提升   不能重复声明 
//const      (常量)在声明时必须赋值   声明的常量一经赋值不可修改(只读)  注意如果声明的是一个对象时 可以改变对象的属性值
//           const有一个很好的应用场景，就是当我们引用第三方库的时声明的变量，用const来声明可以避免未来不小心重命名而导致出现bug：
//           const monent = require('moment')
//let&const  会被{}限制作用域  不会成为window属性 不能重复声明 无变量提升

//let es6的 块级作用域 
    //1 内层变量 会覆盖外层变量  
    //2 用来计算的 循环变量泄露为全局变量  防止污染的    

    for(var i=0;i<10;i++){
        console.log('循环体中:'+i);  // 1————9
    }
        console.log('循环体外:'+i);  // 10

    for(let i=0;i<10;i++){
        console.log('循环体中:'+i);  // 1—————9
    }
        console.log('循环体外:'+i);  // 报错


   //  什么是暂时性死区？
   //  暂时性死区是 JavaScript 中的一种行为，在使用 let 和 const 关键字声明变量时发生，但不使用 var 声明变量。
   //  在 ECMAScript 6 中，在其声明之前（在其范围内）访问letorconst变量会导致 ReferenceError。
   //  发生这种情况的时间跨度，即变量绑定的创建和声明之间，称为时间死区。
   //  让我们用一个例子来看看这个行为，
        function somemethod() {
            console.log(counter1); // undefined
            console.log(counter2); // ReferenceError
        var counter1 = 1;
        let counter2 = 2;
        }       







</script>